<?php

require_once APPPATH . 'dao/DatosSocioDAO.php';
require_once APPPATH . 'dao/SocioDAO.php';
require_once APPPATH . 'dao/CuponDAO.php';
require_once APPPATH . 'dao/CobradorZonaDAO.php';
require_once APPPATH . 'dao/CategoriaDAO.php';
require_once APPPATH . 'dao/EstadoCierreRecaudacionDAO.php';

class Test_tp_magiles extends MY_Controller {

    function __construct() {
        parent::__construct();
    }

    public function index() {

        /* Se guarda la fecha actual para resetearla al finalizar el test */
        $fechaActual = new DateTime();
        $fechaActual->setDate(date('Y'), date('m'), date('d'));
        $fechaActual->setTimezone(new DateTimeZone('America/Argentina/Buenos_Aires'));

        /* Cobrador en Zona 3 */
        $cobradorZonaDAO = new CobradorZonaDAO();
        $cobradorEnZona3 = $cobradorZonaDAO->getCobradorEnZona(3);

        $test = isset($cobradorEnZona3);
        $expected_result = TRUE;
        $test_name = 'Existe Cobrador en Zona 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socios creados con datos aleatorios */
        $datosSocioDAO = new \DatosSocioDAO();
        $socioDAO = new \SocioDAO();
        $categoriaDAO = new \CategoriaDAO();
        $idsSociosCreados = array();

        $i = 0;
        do {
            sleep(1);
            $socioRandom = new models\M_datos_socio();
            $socioRandom = $datosSocioDAO->getDatosSocioRandom();

            if ($socioDAO->getSocioBy($socioRandom->getNumeroDocumento(), 'numero_documento', 'integer') === FALSE) {
                $test = $socioDAO->insertarSocio($socioRandom->getNombre(), $socioRandom->getApellido(), $socioRandom->getTipoDocumento(), $socioRandom->getNumeroDocumento(), $socioRandom->getDomicilio(), $socioRandom->getDomicilioCobro(), $socioRandom->getFechaNacimiento()->format("d-m-Y"), $socioRandom->getZona(), $categoriaDAO->getCategoriaIdByFechaNacimiento($socioRandom->getFechaNacimiento()->format("d-m-Y")));
                $expected_result = TRUE;
                $test_name = 'Socio ' . ($i + 1) . ' creado exitosamente';
                $this->unit->run($test, $expected_result, $test_name);

                $socioCreado = new models\M_socio();
                $socioCreado = $socioDAO->getSocioBy($socioRandom->getNumeroDocumento(), 'numero_documento', 'integer');

                $test = ($socioCreado->getZona()->getId() == 3 && $socioCreado->getCategoria()->getNombre() == 'MAYOR');
                $expected_result = TRUE;
                $test_name = 'Socio ' . ($i + 1) . ' de categoría Mayor y domicilio en Zona 3';
                $this->unit->run($test, $expected_result, $test_name);

                $idsSociosCreados[] = $socioCreado->getId();

                $i++;
            }
        } while ($i < 3);

        /* Se habilita la emisión de los cupones */
        $estadoDAO = new \EstadoCierreRecaudacionDAO();
        $estadoModel = $estadoDAO->getEstadoCierreRecaudacion();
        $estadoPreTest = $estadoModel->getEmisionHabilitada();
        $estadoModel->setEmisionHabilitada(TRUE);
        $estadoDAO->em->persist($estadoModel);
        $estadoDAO->em->flush();

        $test = is_true($estadoModel->getEmisionHabilitada());
        $expected_result = TRUE;
        $test_name = 'La Emisión de Cupones se encuentra habilitada';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se actualiza el estado de los socios antes de generar los cupones */
        $socioModel = new models\M_socio();
        $socioModel->actualizarEstadosSocios($fechaActual->format('d'), $fechaActual->format('m'), $fechaActual->format('Y'));

        /* Verifico estado de los Socios - Todos deben estar Habilitados */
        $socioDAO = null;
        $socioDAO = new \SocioDAO();

        $i = 1;
        foreach ($idsSociosCreados as $idSocio) {
            $socioAux = $socioDAO->getSocioBy($idSocio, 'id', 'integer');

            $test = $socioAux->getEstado()->getId();
            $expected_result = 1;
            $test_name = 'El socio ' . $i . ' tiene estado habilitado';
            $this->unit->run($test, $expected_result, $test_name);

            $i++;
        }

        /* Se generan los cupones */
        $cuponModel = new models\M_cupon();
        $cuponModel->generarCupones($fechaActual->format('d'), $fechaActual->format('m'), $fechaActual->format('Y'));

        /* Obtengo los cupones que se imprimen para entregar a los cobradores */
        $cantCuponesSocio1 = $cantCuponesSocio2 = $cantCuponesSocio3 = 0;
        $cuponesAImprimir = $cuponModel->getCuponesNoPagados();
        if ($cuponesAImprimir != FALSE)
            foreach ($cuponesAImprimir as $cuponAImprimir)
                switch ($cuponAImprimir->getSocio()->getId()) {
                    case $idsSociosCreados[0]:
                        $cantCuponesSocio1++;
                        break;
                    case $idsSociosCreados[1]:
                        $cantCuponesSocio2++;
                        break;
                    case $idsSociosCreados[2]:
                        $cantCuponesSocio3++;
                        break;
                }

        /* Verifico Cupones para Socio 1 */
        $test = $cantCuponesSocio1;
        $expected_result = 1;
        $test_name = 'Se crea un cupón para el Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 2 */
        $test = $cantCuponesSocio2;
        $expected_result = 1;
        $test_name = 'Se crea un cupón para el Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 3 */
        $test = $cantCuponesSocio3;
        $expected_result = 1;
        $test_name = 'Se crea un cupón para el Socio 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se adelanta un mes la hora del Servidor */
        $fechaMasUnMes = new DateTime();
        $fechaMasUnMes->setDate($fechaActual->format('Y'), $fechaActual->format('m') + 1, $fechaActual->format('d'));
        $fechaMasUnMes->setTimezone(new DateTimeZone('America/Argentina/Buenos_Aires'));
        $argumento = "date " . $fechaMasUnMes->format('d/m/Y');
        exec($argumento);

        $test = ($fechaMasUnMes->format('m/d/Y') == date('m/d/Y'));
        $expected_result = TRUE;
        $test_name = 'Se adelanta un mes el reloj del Servidor';
        $this->unit->run($test, $expected_result, $test_name);

        /* Los Socios 2 y 3 no pagan - Se devuelven sus cupones */
        /* Obtengo los cupones de los Socios */
        $cuponDAO = new \CuponDAO();
        $cuponSocio1 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[0]);
        $cuponSocio2 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[1]);
        $cuponSocio3 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[2]);

        /* Registro la devolución del cupón del Socio 2 */
        $test = $cuponModel->registrarDevolucionCupon($cuponSocio2->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra la devolución del cupón del Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Registro la devolución del cupón del Socio 3 */
        $test = $cuponModel->registrarDevolucionCupon($cuponSocio3->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra la devolución del cupón del Socio 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Registro el pago del cupón del Socio 1 */
        $test = $cuponModel->registrarPagoCupon($cuponSocio1->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra el pago del cupón del Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se habilita la emisión de los cupones */
        $estadoDAO = new \EstadoCierreRecaudacionDAO();
        $estadoModel = $estadoDAO->getEstadoCierreRecaudacion();
        $estadoModel->setEmisionHabilitada(TRUE);
        $estadoDAO->em->persist($estadoModel);
        $estadoDAO->em->flush();

        $test = is_true($estadoModel->getEmisionHabilitada());
        $expected_result = TRUE;
        $test_name = 'La Emisión de Cupones se encuentra habilitada';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se actualiza el estado de los socios antes de generar nuevamente los cupones */
        $socioModel = new models\M_socio();
        $socioModel->actualizarEstadosSocios($fechaMasUnMes->format('d'), $fechaMasUnMes->format('m'), $fechaMasUnMes->format('Y'));

        /* Verifico estado de los Socios */
        $socioDAO = null;
        $socioDAO = new \SocioDAO();

        /* Socio 1 Habilitado */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[0], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 1;
        $test_name = 'El socio 1 tiene estado habilitado';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 2 Moroso */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[1], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 2;
        $test_name = 'El socio 2 tiene estado moroso';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 3 Moroso */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[2], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 2;
        $test_name = 'El socio 3 tiene estado moroso';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se generan los cupones */
        $cuponModel = new models\M_cupon();
        $cuponModel->generarCupones($fechaMasUnMes->format('d'), $fechaMasUnMes->format('m'), $fechaMasUnMes->format('Y'));

        /* Obtengo los cupones que se imprimen para entregar a los cobradores */
        $cantCuponesSocio1 = $cantCuponesSocio2 = $cantCuponesSocio3 = 0;
        $cuponesAImprimir = $cuponModel->getCuponesNoPagados();
        if ($cuponesAImprimir != FALSE)
            foreach ($cuponesAImprimir as $cuponAImprimir)
                switch ($cuponAImprimir->getSocio()->getId()) {
                    case $idsSociosCreados[0]:
                        $cantCuponesSocio1++;
                        break;
                    case $idsSociosCreados[1]:
                        $cantCuponesSocio2++;
                        break;
                    case $idsSociosCreados[2]:
                        $cantCuponesSocio3++;
                        break;
                }

        /* Verifico Cupones para Socio 1 */
        $test = $cantCuponesSocio1;
        $expected_result = 1;
        $test_name = 'Se crea un cupón para el Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 2 */
        $test = $cantCuponesSocio2;
        $expected_result = 2;
        $test_name = 'Se crean dos cupones para el Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 3 */
        $test = $cantCuponesSocio3;
        $expected_result = 2;
        $test_name = 'Se crean dos cupones para el Socio 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se adelanta un mes más la hora del Servidor */
        $fechaMasDosMeses = new DateTime();
        $fechaMasDosMeses->setDate($fechaMasUnMes->format('Y'), $fechaMasUnMes->format('m') + 1, $fechaMasUnMes->format('d'));
        $fechaMasDosMeses->setTimezone(new DateTimeZone('America/Argentina/Buenos_Aires'));
        $argumento = "date " . $fechaMasDosMeses->format('d/m/Y');
        exec($argumento);

        $test = ($fechaMasDosMeses->format('m/d/Y') == date('m/d/Y'));
        $expected_result = TRUE;
        $test_name = 'Se adelanta un mes más el reloj del Servidor';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 1 Paga un mes, Socio 2 paga un mes, Socio 3 no paga */
        /* Obtengo los cupones de los Socios */
        $cuponDAO = new \CuponDAO();
        $cuponSocio1 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[0]);
        $cuponSocio2 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[1]);
        $cuponSocio3 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[2]);

        /* Registro la devolución del cupón del Socio 3 */
        $test = $cuponModel->registrarDevolucionCupon($cuponSocio3->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra la devolución del cupón del Socio 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Registro el pago del cupón del Socio 1 */
        $test = $cuponModel->registrarPagoCupon($cuponSocio1->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra el pago del cupón del Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Registro el pago del cupón del Socio 2 */
        $test = $cuponModel->registrarPagoCupon($cuponSocio2->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra el pago del cupón del Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se habilita la emisión de los cupones */
        $estadoDAO = new \EstadoCierreRecaudacionDAO();
        $estadoModel = $estadoDAO->getEstadoCierreRecaudacion();
        $estadoModel->setEmisionHabilitada(TRUE);
        $estadoDAO->em->persist($estadoModel);
        $estadoDAO->em->flush();

        $test = is_true($estadoModel->getEmisionHabilitada());
        $expected_result = TRUE;
        $test_name = 'La Emisión de Cupones se encuentra habilitada';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se actualiza el estado de los socios antes de generar nuevamente los cupones */
        $socioModel = new models\M_socio();
        $socioModel->actualizarEstadosSocios($fechaMasDosMeses->format('d'), $fechaMasDosMeses->format('m'), $fechaMasDosMeses->format('Y'));

        /* Verifico estado de los Socios */
        $socioDAO = null;
        $socioDAO = new \SocioDAO();

        /* Socio 1 Habilitado */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[0], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 1;
        $test_name = 'El socio 1 tiene estado habilitado';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 2 Moroso */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[1], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 2;
        $test_name = 'El socio 2 tiene estado moroso';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 3 Baja Técnica */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[2], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 3;
        $test_name = 'El socio 3 tiene estado en baja técnica';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se generan los cupones */
        $cuponModel = new models\M_cupon();
        $cuponModel->generarCupones($fechaMasDosMeses->format('d'), $fechaMasDosMeses->format('m'), $fechaMasDosMeses->format('Y'));

        /* Obtengo los cupones que se imprimen para entregar a los cobradores */
        $cantCuponesSocio1 = $cantCuponesSocio2 = $cantCuponesSocio3 = 0;
        $cuponesAImprimir = $cuponModel->getCuponesNoPagados();
        if ($cuponesAImprimir != FALSE)
            foreach ($cuponesAImprimir as $cuponAImprimir)
                switch ($cuponAImprimir->getSocio()->getId()) {
                    case $idsSociosCreados[0]:
                        $cantCuponesSocio1++;
                        break;
                    case $idsSociosCreados[1]:
                        $cantCuponesSocio2++;
                        break;
                    case $idsSociosCreados[2]:
                        $cantCuponesSocio3++;
                        break;
                }

        /* Verifico Cupones para Socio 1 */
        $test = $cantCuponesSocio1;
        $expected_result = 1;
        $test_name = 'Se crea un cupón para el Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 2 */
        $test = $cantCuponesSocio2;
        $expected_result = 2;
        $test_name = 'Se crean dos cupones para el Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 3 */
        $test = $cantCuponesSocio3;
        $expected_result = 0;
        $test_name = 'No se crean cupones para el Socio 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se adelanta un mes más la hora del Servidor */
        $fechaMasTresMeses = new DateTime();
        $fechaMasTresMeses->setDate($fechaMasDosMeses->format('Y'), $fechaMasDosMeses->format('m') + 1, $fechaMasDosMeses->format('d'));
        $fechaMasTresMeses->setTimezone(new DateTimeZone('America/Argentina/Buenos_Aires'));
        $argumento = "date " . $fechaMasTresMeses->format('d/m/Y');
        exec($argumento);

        $test = ($fechaMasTresMeses->format('m/d/Y') == date('m/d/Y'));
        $expected_result = TRUE;
        $test_name = 'Se adelanta un mes más el reloj del Servidor';
        $this->unit->run($test, $expected_result, $test_name);

        /* Ninguno de los Socios paga su cupón este mes */
        /* Obtengo los cupones de los Socios */
        $cuponDAO = new \CuponDAO();
        $cuponSocio1 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[0]);
        $cuponSocio2 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[1]);
        $cuponSocio3 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[2]);

        /* Registro la devolución del cupón del Socio 2 */
        $test = $cuponModel->registrarDevolucionCupon($cuponSocio2->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra la devolución del cupón del Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Registro la devolución del cupón del Socio 1 */
        $test = $cuponModel->registrarDevolucionCupon($cuponSocio1->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra la devolución del cupón del Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se habilita la emisión de los cupones */
        $estadoDAO = new \EstadoCierreRecaudacionDAO();
        $estadoModel = $estadoDAO->getEstadoCierreRecaudacion();
        $estadoModel->setEmisionHabilitada(TRUE);
        $estadoDAO->em->persist($estadoModel);
        $estadoDAO->em->flush();

        $test = is_true($estadoModel->getEmisionHabilitada());
        $expected_result = TRUE;
        $test_name = 'La Emisión de Cupones se encuentra habilitada';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se actualiza el estado de los socios antes de generar nuevamente los cupones */
        $socioModel = new models\M_socio();
        $socioModel->actualizarEstadosSocios($fechaMasTresMeses->format('d'), $fechaMasTresMeses->format('m'), $fechaMasTresMeses->format('Y'));

        /* Verifico estado de los Socios */
        $socioDAO = null;
        $socioDAO = new \SocioDAO();

        /* Socio 1 Moroso */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[0], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 2;
        $test_name = 'El socio 1 tiene estado moroso';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 2 Baja Técnica */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[1], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 3;
        $test_name = 'El socio 2 tiene estado en baja técnica';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 3 Baja Técnica */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[2], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 3;
        $test_name = 'El socio 3 tiene estado en baja técnica';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se generan los cupones */
        $cuponModel = new models\M_cupon();
        $cuponModel->generarCupones($fechaMasTresMeses->format('d'), $fechaMasTresMeses->format('m'), $fechaMasTresMeses->format('Y'));

        /* Obtengo los cupones que se imprimen para entregar a los cobradores */
        $cantCuponesSocio1 = $cantCuponesSocio2 = $cantCuponesSocio3 = 0;
        $cuponesAImprimir = $cuponModel->getCuponesNoPagados();
        if ($cuponesAImprimir != FALSE)
            foreach ($cuponesAImprimir as $cuponAImprimir)
                switch ($cuponAImprimir->getSocio()->getId()) {
                    case $idsSociosCreados[0]:
                        $cantCuponesSocio1++;
                        break;
                    case $idsSociosCreados[1]:
                        $cantCuponesSocio2++;
                        break;
                    case $idsSociosCreados[2]:
                        $cantCuponesSocio3++;
                        break;
                }

        /* Verifico Cupones para Socio 1 */
        $test = $cantCuponesSocio1;
        $expected_result = 2;
        $test_name = 'Se crean dos cupones para el Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 2 */
        $test = $cantCuponesSocio2;
        $expected_result = 0;
        $test_name = 'No se crean cupones para el Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 3 */
        $test = $cantCuponesSocio3;
        $expected_result = 0;
        $test_name = 'No se crean cupones para el Socio 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se adelanta un mes más la hora del Servidor */
        $fechaMasCuatroMeses = new DateTime();
        $fechaMasCuatroMeses->setDate($fechaMasTresMeses->format('Y'), $fechaMasTresMeses->format('m') + 1, $fechaMasTresMeses->format('d'));
        $fechaMasCuatroMeses->setTimezone(new DateTimeZone('America/Argentina/Buenos_Aires'));
        $argumento = "date " . $fechaMasCuatroMeses->format('d/m/Y');
        exec($argumento);

        $test = ($fechaMasCuatroMeses->format('m/d/Y') == date('m/d/Y'));
        $expected_result = TRUE;
        $test_name = 'Se adelanta un mes más el reloj del Servidor';
        $this->unit->run($test, $expected_result, $test_name);

        /* Todos los Socios pagan su cupón este mes */
        /* Obtengo los cupones de los Socios */
        $cuponDAO = new \CuponDAO();
        $cuponSocio1 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[0]);
        $cuponSocio2 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[1]);
        $cuponSocio3 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[2]);

        /* Registro el pago de un cupón del Socio 1 */
        $test = $cuponModel->registrarPagoCupon($cuponSocio1->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra el pago de un cupón del Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Obtengo otro cupón del Socio 1 */
        $cuponSocio1 = $cuponDAO->getUltimoCuponBySocioId($idsSociosCreados[0]);

        /* Registro el pago de otro cupón del Socio 1 */
        $test = $cuponModel->registrarPagoCupon($cuponSocio1->getId());
        $expected_result = TRUE;
        $test_name = 'Se registra el pago de otro cupón del Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se habilita la emisión de los cupones */
        $estadoDAO = new \EstadoCierreRecaudacionDAO();
        $estadoModel = $estadoDAO->getEstadoCierreRecaudacion();
        $estadoModel->setEmisionHabilitada(TRUE);
        $estadoDAO->em->persist($estadoModel);
        $estadoDAO->em->flush();

        $test = is_true($estadoModel->getEmisionHabilitada());
        $expected_result = TRUE;
        $test_name = 'La Emisión de Cupones se encuentra habilitada';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se actualiza el estado de los socios antes de generar nuevamente los cupones */
        $socioModel = new models\M_socio();
        $socioModel->actualizarEstadosSocios($fechaMasCuatroMeses->format('d'), $fechaMasCuatroMeses->format('m'), $fechaMasCuatroMeses->format('Y'));

        /* Verifico estado de los Socios */
        $socioDAO = null;
        $socioDAO = new \SocioDAO();

        /* Socio 1 Habilitado */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[0], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 1;
        $test_name = 'El socio 1 tiene estado habilitado';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 2 Baja Técnica */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[1], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 3;
        $test_name = 'El socio 2 tiene estado en baja técnica';
        $this->unit->run($test, $expected_result, $test_name);

        /* Socio 3 Baja Técnica */
        $socioAux = $socioDAO->getSocioBy($idsSociosCreados[2], 'id', 'integer');
        $test = $socioAux->getEstado()->getId();
        $expected_result = 3;
        $test_name = 'El socio 3 tiene estado en baja técnica';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se generan los cupones */
        $cuponModel = new models\M_cupon();
        $cuponModel->generarCupones($fechaMasCuatroMeses->format('d'), $fechaMasCuatroMeses->format('m'), $fechaMasCuatroMeses->format('Y'));

        /* Obtengo los cupones que se imprimen para entregar a los cobradores */
        $cantCuponesSocio1 = $cantCuponesSocio2 = $cantCuponesSocio3 = 0;
        $cuponesAImprimir = $cuponModel->getCuponesNoPagados();
        if ($cuponesAImprimir != FALSE)
            foreach ($cuponesAImprimir as $cuponAImprimir)
                switch ($cuponAImprimir->getSocio()->getId()) {
                    case $idsSociosCreados[0]:
                        $cantCuponesSocio1++;
                        break;
                    case $idsSociosCreados[1]:
                        $cantCuponesSocio2++;
                        break;
                    case $idsSociosCreados[2]:
                        $cantCuponesSocio3++;
                        break;
                }

        /* Verifico Cupones para Socio 1 */
        $test = $cantCuponesSocio1;
        $expected_result = 1;
        $test_name = 'Se crea un cupón para el Socio 1';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 2 */
        $test = $cantCuponesSocio2;
        $expected_result = 0;
        $test_name = 'No se crean cupones para el Socio 2';
        $this->unit->run($test, $expected_result, $test_name);

        /* Verifico Cupones para Socio 3 */
        $test = $cantCuponesSocio3;
        $expected_result = 0;
        $test_name = 'No se crean cupones para el Socio 3';
        $this->unit->run($test, $expected_result, $test_name);

        /* Reseteo la fecha del sistema */
        exec("date " . $fechaActual->format('d/m/Y'));

        $test = ($fechaActual->format('m/d/Y') == date('m/d/Y'));
        $expected_result = TRUE;
        $test_name = 'Se restablece el reloj del Servidor';
        $this->unit->run($test, $expected_result, $test_name);

        /* Se restablece el estado de la Emisión de Cupones */
        $estadoDAO = new \EstadoCierreRecaudacionDAO();
        $estadoModel = $estadoDAO->getEstadoCierreRecaudacion();
        $estadoModel->setEmisionHabilitada($estadoPreTest);
        $estadoDAO->em->persist($estadoModel);
        $estadoDAO->em->flush();

        /* Generación del Reporte de Ejecución de las Pruebas */
        echo $this->unit->report();
    }

}

?>
